import win32gui, win32ui, win32con, win32api, win32com
import win32api
import _winapi as api
import win32print
import time
from PIL import Image


def window_capture(hwnd):

    # 根据窗口句柄获取窗口的设备上下文DC（Divice Context）
    hwndDC = win32gui.GetWindowDC(hwnd)
    window = win32gui.GetWindow(hwnd)

    # 根据窗口的DC获取mfcDC
    mfcDC = win32ui.CreateDCFromHandle(hwndDC)
    # mfcDC创建可兼容的DC
    saveDC = mfcDC.CreateCompatibleDC()
    # 创建bigmap准备保存图片
    saveBitMap = win32ui.CreateBitmap()

    # 为bitmap开辟空间
    saveBitMap.CreateCompatibleBitmap(mfcDC, 410, 700)
    # 高度saveDC，将截图保存到saveBitmap中
    saveDC.SelectObject(saveBitMap)
    # 截取从左上角（0，0）长宽为（w，h）的图片
    saveDC.BitBlt((0, 0), (410, 700), mfcDC, (1093, 132), win32con.SRCCOPY)
    saveBitMap.SaveBitmapFile(saveDC, "原神.bmp")


    # 释放内存！这一步很重要！
    win32gui.DeleteObject(saveBitMap.GetHandle())
    saveDC.DeleteDC()
    mfcDC.DeleteDC()
    win32gui.ReleaseDC(hwnd, hwndDC)


if __name__ == '__main__':
    handle = win32gui.FindWindow(0, "原神")
    win32gui.SendMessage(handle, win32con.WM_SYSCOMMAND, win32con.SC_RESTORE, 0)  # 这句很重要，这句可以保证将句柄置到前端
    win32gui.SetForegroundWindow(handle)
    window_capture(handle)
    time.sleep(2)
